# 面向对象编程——Object Oriented Programming，
# 简称OOP，是一种程序设计思想。
# OOP把对象作为程序的基本单元，
# 一个对象包含了数据和操作数据的函数。

# 类是抽象的模板，比如Student类，
# 而实例是根据类创建出来的一个个具体的“对象”，
# 每个对象都拥有相同的方法，但各自的数据可能不同。


# 例子：
#   多数宠物狗都有名字和年龄，
#   同时我们假设它们都会坐下和打滚。
# class 关键字：用于定义类，我们约定类名以大写字母开头
class Dog:
    """
    宠物狗类
    """
    def __init__(self, name, age):
        """
        初始化函数，通过类（模板）创建对象（实例）的时候调用
        :param name: 名字
        :param age: 年龄
        """
        print("初始化调用！")
        self.name = name
        self.age = age

    # class下面所有的函数称为方法
    def sit_down(self):
        """
        动态行为，可以让小狗坐下
        :return:
        """
        print("{}乖乖坐下".format(self.name))

    def roll_over(self):
        """
        打滚
            self 形参：它是一个指向实例本身的引用，
            实例的每次调用都会自动传入自身，这样使得实例能够访问类中的属性和方法
            self 形参必不可少，而且必须位于其他形参的前面
        :return:
        """
        print("{}在打滚".format(self.name))

    def introduction_by_self(self):
        print("你好！我叫{};我家住在xxx，今年{}岁了".format(self.name, self.age))


# 创建对象的方式
lucky = Dog("lucky", 3)
lucky.sit_down()
lucky.roll_over()
lucky.introduction_by_self()